def demo(char):
    print("这是内部函数")
    char = "内部-2"
    print(char)
    
gl_char = "外部-1" 
demo(gl_char)
print("这是外部全局变量")
print(gl_char)

>>>这是内部函数
>>>内部-2
>>>这是外部全局变量
>>>外部-1

def demo(num_list):
    print("这是内部函数")
    num_list = [1,2,3]  # 没有变化是因为赋值语句的本质是贴标签，重新在内存中生成了一个[1,2,3]列表
    print(num_list)
    
gl_num_list = [4,5,6]
demo(gl_num_list)
print("这是外部全局变量")
print(gl_num_list)

>>>这是内部函数
>>>[1, 2, 3]
>>>这是外部全局变量
>>>4, 5, 6]

def demo(num_list):
    print("这是内部函数")
    num_list.append(8)  # 由于 可变数据类型修改是直接在 内存id中修改 所以全局变量变了 重要
    print(num_list)
    
gl_num_list = [4,5,6]
demo(gl_num_list)
print("这是外部全局变量")
print(gl_num_list)

>>>这是内部函数
>>>[4, 5, 6, 8]
这是外部全局变量
>>>[4, 5, 6, 8]


def demo(num_list):
    print("这是内部函数")
    num_list +=num_list  # 对于列表list来说 += 本质上是list.extend方法 所以会改变id内存中的地址
    print(num_list)
    
gl_num_list = [4,5,6]
demo(gl_num_list)
print("这是外部全局变量")
print(gl_num_list)

这是内部函数
[4, 5, 6, 4, 5, 6]
这是外部全局变量
[4, 5, 6, 4, 5, 6]


def demo(num_list):
    print("这是内部函数")
    num_list = num_list + num_list  # 赋值预计就不会影响 gl_num变量
    print(num_list)
    
gl_num_list = [4,5,6]
demo(gl_num_list)
print("这是外部全局变量")
print(gl_num_list)

这是内部函数
[4, 5, 6, 4, 5, 6]
这是外部全局变量
[4, 5, 6]

# 一个函数参数的默认值，仅仅在该函数定义的时候，被赋值一次
import time
def report(when=time.time()):
    print(when)
report()
report()
# 两个一样 应为第一次when定义就内存生成一次且唯一，想想如果是list会怎么样